package com.huangw;

/*
   常量在编译阶段会存入到调用这个常量的方法所在的类的常量池里，
   本质上，调用类并没有直接引用到定义常量的类，因此并不会触发
   定义常量的类的初始化
   注意：这里指的是把常量存放到MyTest2的常量池，之后的MyTest2与MyParent2就没有任何关系
   甚至可以将MyParent2的class删除

   助记符：
            ldc：将int/float/String类型的常量值从常量池中推送至栈顶（栈顶的值是即将要用的）
            bipush：将单字节（-128 ~ 127）的常量值从常量池中推至栈顶
            sipush：将一个短整型（-32768 ~ 32767）的常量值从常量池中推至栈顶
            iconst_1：将int型的常量值1从常量池中推至栈顶（jvm专门为0/1/2/3/4/5这5个数字开的助记符），iconst_m1则表示的是-1



 */

public class MyTest2 {
    public static void main(String[] args) {
        System.out.println(MyParent2.str);
    }
}

class MyParent2 {
    public static final String str = "hello word";

    public static final short s = 127;

    public static final int i =128;

    public static final int m = -1;

    static {
        System.out.println("Myparent2 static block");
    }
}